package com.caigou.component;

import com.caigou.bean.cms.entity.Channel;
import com.caigou.bean.cms.entity.ChannelData;
import com.caigou.enums.ResponseEnum;
import com.caigou.service.ChannelDataService;
import com.caigou.service.ChannelService;
import com.caigou.util.Result;
import com.caigou.util.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @FileName: ChannelComponent
 * @Author: 小飞
 * @Date: 2022/2/25 0025
 * @Description:
 */
@Slf4j
@Component
public class ChannelComponent {

    @Resource
    private ChannelService channelService;
    @Resource
    private ChannelDataService channelDataService;

    /**
     * 验证当前文章是否可以推荐到当前频道
     * @param articleId 文章ID
     * @param plateId   频道ID
     * @return 0不可推荐1可以推荐
     */
    public int loadChannelReleaseStatus(String articleId, String plateId){
        // 获取当前频道的配置信息
        Channel channel = channelService.loadChannelByPlate(plateId);
        if (null == channel) return 0;// 频道信息获取不到，不可添加
        // 判定当前频道所配置的最大内容量
        int maxCount = channel.getChannelCount();// 当前频道配置的最大数量
        // 倍数控制处理
        switch (plateId) {
            case "101010301":// 首页-图表数据(2倍)
            case "104010201":// 监管-新规解读(2倍)
            case "105010201":// 研究院-政采大数据(2倍)
            case "107010201":// 汽车-图表数据
            case "108010201":// IT-图表数据
            case "109010201":// 电梯-图表数据
            case "110010201":// 空调-图表数据
            case "111010201":// 家具-图表数据
                maxCount = maxCount * 2;
                break;
            case "101010201":// 首页-易采通精品课(3倍)
            case "101010501":// 首页-正福易考通(3倍)
            case "102010201":// 采购人-高校院所(3倍)
            case "103010201":// 实务-亚利说采购(3倍)
            case "107010302":// 汽车-图例展示
            case "108010302":// IT-图例展示
            case "109010302":// 电梯-图例展示
            case "110010302":// 空调-图例展示
            case "111010302":// 家具-图例展示
                maxCount = maxCount * 3;
                break;
        }
        int haveCount = channelDataService.loadChannelDataCount(plateId);// 当前频道已推荐数量(包含非锁定状态)
        int lockCount = channelDataService.loadChannelDataLockCount(plateId);// 当前频道锁定状态的推荐数量
        // 锁定推荐数量不能超过配置的最大数量
        if (lockCount >= maxCount) return 0;// 锁定数量已满，不可推荐
        if (haveCount < maxCount) {
            return 1;// 当前频道推荐还有空闲位置--直接修改当前数据为推荐状态
        } else {
            return 1;// 推荐位已满，替换掉已推荐中未锁定的数据(未锁定状态最早推荐的一条数据)
        }
    }
}
